const app = getApp();
const db = wx.cloud.database();
const _ = db.command;
const $ = _.aggregate;
var that;

// pages/trends/trends.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    userInfo: app.globalData.userInfo,
    _openid: app.globalData._openid,
    selected: 0,
    myAppsList: [],
    msgList: [],
    statusMap: app.globalData.statusMap
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    that = this;
		this.setData({
			userInfo: app.globalData['userInfo']
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        selected: 1
      })
    }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.getMyApplications();
    this.getMessage();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  /**
   * 获取当前用户的申请信息，包括别人的申请和自己的申请
   */
  getMyApplications: function(){
    wx.cloud.callFunction({
      name: 'getUserApplication'
    }).then((res) => {
      console.log('apps', res);
      that.setData({
        myAppsList: res.result.data
      });
    });
  },

  /**
   * 切换选中的tab
   * @param {*} arg tabs组件触发select事件传入的参数，具体数据在detail中
   */
  select: function(arg){
    console.log(arg);
    this.setData({
      selected: Number(arg.detail.id)
    });
  },

  getMessage: function(){
    wx.cloud.callFunction({
      name: 'getMyMessage',
      data: {
        skip: 0,
        limit: 0
      }
    }).then((res) => {
      console.log('get msg res', res);
      that.setData({
        msgList: res.result.data
      });
    }).catch((res) => {
      console.log('get msg failed', res);
    });
  },

  /**
   * 拒绝申请
   * @param {*} arg tap事件参数
   */
  reject: async function(arg){
    console.log('reject', arg);
    var modalRes = await wx.showModal({
      title: '提示',
      content: '确认拒绝吗？'
    });
    if(!modalRes.confirm) return;
    var _id = arg.currentTarget.dataset.id;
    console.log('id', _id);
    db.collection('application').doc(_id).update({
      data: {
        status: 'rejected'
      }
    }).then((res) => {
      console.log('reject success', res);
    }).catch((res) => {
      console.log('reject fail', res);
    });
  },

  /**
   * 接受申请
   * @param {*} arg tap事件参数
   * @todo 将逻辑放到云函数中使用事务操作
   */
  accept: async function(arg){
    console.log('accept', arg);
    var modalRes = await wx.showModal({
      title: '提示',
      content: '确认接受吗？'
    });
    if(!modalRes.confirm) return;
    var appId = arg.currentTarget.dataset.id;
    var applyerOpenid = arg.currentTarget.dataset.applyer;
    var teamId = arg.currentTarget.dataset.post;
    console.log('app applyer team', appId, applyerOpenid, teamId);
    // 第一个请求：修改申请状态
    var t1 = db.collection('application').doc(appId).update({
      data: {
        status: 'accepted'
      }
    });
    // 第二个请求：修改队伍成员信息
    var t2 = db.collection('post').doc(teamId).update({
      data: {
        members: _.push(applyerOpenid)
      }
    });
    Promise.all([t1, t2]).then((res) => {
      // 成功回调
      wx.showModal({
        title: '提示',
        content: '成功接受申请！',
        showCancel: false
      });
    }).catch((res) => {
      // 失败回调
      console.log('accept failed', res);
      wx.showToast({
        title: '错误',
        icon: 'error'
      }).finally((res) => {
        this.getMyApplications();
      });
    });
  }
})